##LIBRERÍAS:
library(readxl)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(stringr)
library(mapview) 
library(animation)
library(sf)
## Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
library(raster)
## Loading required package: sp
## 
## Attaching package: 'raster'
## The following object is masked from 'package:dplyr':
## 
##     select
library(dplyr)
library(tidyr)
## 
## Attaching package: 'tidyr'
## The following object is masked from 'package:raster':
## 
##     extract
library(spData)
## To access larger datasets in this package, install the spDataLarge
## package with: `install.packages('spDataLarge',
## repos='https://nowosad.github.io/drat/', type='source')`
library(tmap) 
library(tmaptools)

En primer lugar, cargamos los datos por provincias:

Vemos que la primera fila de cada data frame se corresponde con los habitantes de toda la provincia. Por este motivo se elimina esta fila en cada uno:

sum(Alicante[2:142,2])==Alicante[1,2]
##      2018..2
## [1,]    TRUE
sum(Castellon[2:136,2])==Castellon[1,2]
##      2018..2
## [1,]    TRUE
sum(Valencia[2:267,2])==Valencia[1,2]
##      2018..2
## [1,]    TRUE
Alicante<-Alicante[-1,]
Castellon<-Castellon[-1,]
Valencia<-Valencia[-1,]

Ahora, se seleccionan los datos totales para cada provincia:

#Se eliminan las columnas correspondientes al año 1997 ya que no contiene datos.

Alicante_total<-Alicante%>%dplyr::select(1:22)%>%slice(1:141)

Castellon_total<-Castellon%>%dplyr::select(1:22)%>%slice(1:135)

Valencia_total<-Valencia%>%dplyr::select(1:22)%>%slice(1:266)


ComVal_total<-rbind(Alicante_total,Castellon_total,Valencia_total)
colnames(ComVal_total)<-str_sub(colnames(ComVal_total),1,4)
ComVal_total<-ComVal_total%>%rename(Nombre=1)

#Eliminamos variables:

rm(Alicante,Alicante_total,Castellon,Castellon_total,Valencia,Valencia_total)

Guardamos el mapa de la Comunidad Valenciana:

library(raster)
library(tmap)
SpainRegions_mun <- getData('GADM', country='ESP', level=4)
SpainRegions_mun<-SpainRegions_mun[SpainRegions_mun@data[["NAME_1"]]=="Comunidad Valenciana",]

Se van a limpiar los nombres de los municipios del data set ComVal_total de forma que coincida con los nombres de los municipios guardados en el objeto mapa, para posteriormente poder asociar los datos de la población con el mapa:

ComVal_total[[1]]<-str_to_lower(str_sub(ComVal_total[[1]], 6))

for (i in seq(1:length(ComVal_total[[1]]))){
  
 if (str_detect(ComVal_total[[i,1]],"/")==TRUE){
   if(sum(str_to_title(str_trim(str_sub(ComVal_total[[i,1]], 1, str_locate(ComVal_total[[i,1]], "/")[1]-1)))== str_to_title(SpainRegions_mun@data[["NAME_4"]]))>=1){
    
    ComVal_total[[i,1]]<- str_sub(ComVal_total[[i,1]], 1, str_locate(ComVal_total[[i,1]], "/")[1]-1)
   }else{
     ComVal_total[[i,1]]<- str_sub(ComVal_total[[i,1]], str_locate(ComVal_total[[i,1]], "/")[1]+1, str_length(ComVal_total[[i,1]]))
   }
 } else{}
 if ((str_detect(ComVal_total[[i,1]],","))==TRUE){
      ComVal_total[[i,1]]<-str_c(str_sub(ComVal_total[[i,1]],-3),ComVal_total[[i,1]],                              sep = "", collapse = NULL)
      ComVal_total[[i,1]]<-str_to_title(str_trim(str_trunc(ComVal_total[[i,1]],                             str_length(ComVal_total[[i,1]])-(str_length(ComVal_total[[i,1]])-str_locate(ComVal_total[[i,1]], ",")[1]+1), "right","")))
     }else{
      ComVal_total[[i,1]]<-str_to_title(str_trim(ComVal_total[[i,1]]))
     }
}
SpainRegions_mun@data[["NAME_4"]]<-str_to_title(str_replace_all(SpainRegions_mun@data[["NAME_4"]],"L'", "L' "))
#Estos tres municipios se asocian de forma manual:

ComVal_total$Nombre[which(ComVal_total$Nombre=="Sant Joanet")]<-"San Juan De Énova"
ComVal_total$Nombre[which(ComVal_total$Nombre=="El Puig De Santa Maria")]<-"Puig"
ComVal_total$Nombre[which(ComVal_total$Nombre=="Real")]<-"Real De Montroi"
x<-ComVal_total$Nombre[!(ComVal_total$Nombre%in%SpainRegions_mun@data$NAME_4)]
y<-setdiff(SpainRegions_mun@data$NAME_4,ComVal_total$Nombre)


for (mun in x) {
  ComVal_total$Nombre[which(ComVal_total$Nombre==mun)]<-y[which.min(adist(mun,y,partial = FALSE))]
}

#Vemos que todos los nombres coinciden:
setdiff(SpainRegions_mun@data$NAME_4,ComVal_total$Nombre)
## character(0)
rm(x,y,mun,i)
#Se asocian los datos de población con el mapa:
MunComVAL<-sp::merge(SpainRegions_mun,ComVal_total,by.x="NAME_4",by.y="Nombre")
breaks<-c(0,100,500,1000,5000,10000,30000,50000,100000,500000,800000)
paleta<-get_brewer_pal("Oranges", n = 10, contrast = c(0, 0.9))

Dibujamos el mapa correspondiente al año 2018:

tmap_mode("plot")
## tmap mode set to plotting
mapa<-tm_shape(MunComVAL)+tm_fill("2018",palette=paleta,convert2density = F,style = "fixed",breaks = breaks)+tm_borders(col="grey",lwd=0.3,alpha=0.5)+tm_layout(bg.color = "lightblue", legend.show = T,legend.outside = T,legend.outside.position = c("right","bottom"),main.title = "Población por municipios",main.title.position  = c("center","top"))+tm_compass(type = "8star", show.labels= 1, position = c("right", "bottom"))

print(mapa)

Ahora, dibujamos loas mapas por año:

tmap_mode("plot")
## tmap mode set to plotting
for (j in seq(1998,2018,1)[-2]){
  mapa<-tm_shape(MunComVAL)+tm_fill(paste(j),palette=paleta,n=10,convert2density = F,style = "fixed",breaks =breaks)+ tm_borders(col="grey",lwd=0.9,alpha=0.7)+ tm_layout(bg.color = "lightblue",legend.show = T,legend.outside = T,legend.outside.position = "right",main.title = "Población por municipios",main.title.position  = c("center","top"))+tm_compass(type = "8star", show.labels= 1, position = c("right", "bottom"))
  print(mapa)
}

Finalmente, se crea un gif que muestre la evolución de la población de la Comunidad Valenciana entre los años 1998 y 2018:

tmap_mode("plot")
## tmap mode set to plotting
mapa_animation<-  tm_shape(MunComVAL)+tm_fill(col=paste0(seq(1998,2018,1)[-2]) ,palette=paleta,style = "fixed",breaks = breaks)+tm_borders(col="grey",lwd=0.9,alpha=0.7)+tm_layout(main.title = c("Evolución de población por municipios") ,bg.color = "lightblue",legend.show = T,legend.outside = T,legend.outside.position = c("right","bottom"),main.title.position  = c("center","top"))+tm_facets(nrow = 1,ncol = 1, free.coords = FALSE)+tm_compass(type = "8star", show.labels= 1, position = c("right", "bottom"))

tmap_animation(mapa_animation, "evolucion_pob.gif",delay=50)
## Warning in syscall("convert -version"): 'convert -version' execution failed
## with error code 4
## Animation saved to C:\Users\Maria\Desktop\Visualización\TEMA 4_Visualización espacial\TAREA_Visualizacion_datos_espaciales\Tarea_Visualización_datos_espaciales_Maria_Bellver\evolucion_pob.gif

save(MunComVAL,file="MunComVAL.RData")